library SHARELIB;

uses
  Windows,SysUtils,Classes;

const
  mapFileName: PChar = 'SharedMemory';

type

PShareData = ^TShareData;

TShareData = record         
   I: Integer;
end;

var
   GlobalData : PShareData; 
   MapHandle   : THandle;   


procedure GetSharedData(var Data: PShareData); 
                                                                          stdcall;export;
begin
   Data := GlobalData;
end;

procedure OpenSharedMem;
var
   Size: Integer;
begin
Size := SizeOf(TShareData);


MapHandle := CreateFileMapping(DWord(-1), nil,
                                  PAGE_READWRITE, 0, Size,mapFileName);

GlobalData := MapViewOfFile(MapHandle,
                                      FILE_MAP_ALL_ACCESS, 0, 0, Size);

GlobalData^.I := 0;
end;

procedure CloseSharedMem;
begin
   UnmapViewOfFile(GlobalData);
   CloseHandle(MapHandle);
end;

procedure DLLMain(dwReason: DWord);
begin
  case dwReason of
       DLL_PROCESS_ATTACH: OpenSharedMem;
       DLL_PROCESS_DETACH: CloseSharedMem;
  end;
end;

exports
   GetSharedData;

begin
     DllProc := @DLLMain;
     DLLMain(DLL_PROCESS_ATTACH);
end.
